package orgs.example.utils;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class EntityToMap {
    /**
     * 将实体类对象转换为 Map<String, Object>
     * @param entity 要转换的实体类对象
     * @return 包含实体类字段名和值的 Map
     * @throws IllegalAccessException 如果访问字段时发生错误
     */
public static Map<String, Object> convert(Object entity) throws IllegalAccessException {
    Map<String, Object> resultMap = new HashMap<>();

    if (entity == null) {
        return resultMap;
    }

    Class<?> clazz = entity.getClass();

    // 获取所有字段，包括私有字段
    Field[] fields = clazz.getDeclaredFields();

    for (Field field : fields) {
        // 设置可访问，以便访问私有字段
        field.setAccessible(true);

        // 获取字段名
        String fieldName = field.getName();

        // 获取字段值
        Object fieldValue = field.get(entity);

        // 将字段名和值放入 Map
        resultMap.put(fieldName, fieldValue);
    }

    return resultMap;
}
    /**
     * 将实体类对象转换为 Map<String, Object>，忽略 null 值字段
     * @param entity 要转换的实体类对象
     * @return 包含实体类非null字段名和值的 Map
     * @throws IllegalAccessException 如果访问字段时发生错误
     */
    public static Map<String, Object> convertIgnoreNull(Object entity) throws IllegalAccessException {
        Map<String, Object> resultMap = new HashMap<>();

        if (entity == null) {
            return resultMap;
        }

        Class<?> clazz = entity.getClass();
        Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object fieldValue = field.get(entity);

            if (fieldValue != null) {
                resultMap.put(fieldName, fieldValue);
            }
        }

        return resultMap;
    }
}

